package com.hive.pbc.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

import java.text.ParseException;

/**
 * 生成指定级别时间戳，支持秒、毫秒、微秒
 */
public class DateTimeUtils extends UDF {

    public long evaluate(String dateType) throws ParseException {
        if ("s".equals(dateType)) {
            return System.currentTimeMillis() / 1000;
        } else if ("ms".equals(dateType)) {
            return System.currentTimeMillis();
        }
        if ("us".equals(dateType)) {
            return getMicTime();
        } else {
            throw new IllegalArgumentException("Unsupported time type, usage: s, ms, us.");
        }
    }

    /**
     * @return返回微秒
     */
    public static Long getMicTime() {
        Long cutime = System.currentTimeMillis() * 1000; // 微秒
        Long nanoTime = System.nanoTime(); // 纳秒
        return cutime + (nanoTime - nanoTime / 1000000 * 1000000) / 1000;
    }

    public static void main(String[] args) throws Exception {
        DateTimeUtils dateTimeUtils = new DateTimeUtils();
        System.out.println(dateTimeUtils.evaluate(args[0]));
    }
}
